ПолеЗамена.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                          ОТДЕЛ ПолеЗамена;
(*============================================================================*
 * НАЗНАЧЕНИЕ: вывод вопроса о замене
 *============================================================================*)
ИСПОЛЬЗУЕТ
  Надел,
  Поле,
  Подложка,
  Записка,
  Черта,
  Кнопка,
  Цепь ИЗ "..\Иное\",
  Ввод ИЗ "..\Обмен\";
ПОСТ
  (* действия кнопок и состояние поля *)
  сЗаменить-  = 1;
  сВсе-       = 2;
  сПропустить-= 3;

(******************************************************************************)
ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка);
(* получить и обработать управляющие послания *)
УКАЗ
  ДЛЯ посылка ВИДА
  | Ввод.ОтКлавиш:
      ЕСЛИ посылка.код = 1BH ТО (* Esc *)
        поле.состояние:=Поле.сОтмена;
        посылка.код:=0
      КОН
  | Кнопка.Посылка:
      поле.состояние:=посылка.кнопка.действие
  ИНАЧЕ
  КОН             
КОН Приём;

(******************************************************************************)
ЗАДАЧА Выполнить-():ЦЕЛ;                  (* состояние поля после отработки *)
(* Цель:  осуществить вывод вопроса *)
(******************************************************************************)
(* До: *)   
    окружение:Поле.Доступ; (* окружающее поле *)
    образец-:ЦЕПЬ;         (* искомая цепочка *)
    замена-:ЦЕПЬ           (* новая цепочка   *)
(* Ответ: *)
(******************************************************************************)
ПОСТ
  (* цепочки для кнопок *)
  цЗаменить   ="[ ~Заменить ]";
  цВсе        ="[ ~Все ]";
  цПропустить ="[ ~Пропустить ]";
  цОтмена     ="[ Отмена ]";
  длЗаменить  =ДЛИНА(цЗаменить)-1;
  длВсе       =ДЛИНА(цВсе)-1;
  длПропустить=ДЛИНА(цПропустить)-1;
  длОтмена    =ДЛИНА(цОтмена);
  промежуток  =2; (* промежуток между кнопками *)
  колонок=70;
  занято=длЗаменить + промежуток + длВсе +
                        промежуток + длПропустить +
                        промежуток + длОтмена;
  позЗаменить=1 + ((колонок-занято-1) ДЕЛИТЬ 2);
  позВсе=позЗаменить+длЗаменить+промежуток;
  позПропустить=позВсе+длВсе+промежуток;
  позОтмена=позПропустить+длПропустить+промежуток;
  позНа=1 + ((колонок-2-1) ДЕЛИТЬ 2);

ПЕР
  поле:Поле.Доступ;
  подложка:Подложка.Доступ;
  черта:Черта.Доступ;
  зОбразец,зНа,зЗамена:Записка.Доступ;
  кнЗаменить,кнВсе,кнПропустить,кнОтмена:Кнопка.Доступ;
  цОбразец,цЗамена:ЦЕПЬ[128];
  позОбразец,позЗамена:ЦЕЛ;
УКАЗ
  цОбразец:='"';
  Цепь.Добавить(цОбразец,образец);
  Цепь.ДобавитьЗнак(цОбразец,'"');
  цЗамена:='"';
  Цепь.Добавить(цЗамена,замена);
  Цепь.ДобавитьЗнак(цЗамена,'"');
  позОбразец:=1+((колонок - ДЛИНА(цОбразец) -1) ДЕЛИТЬ 2);
  позЗамена :=1+((колонок - ДЛИНА(цЗамена) -1) ДЕЛИТЬ 2);
  (* создаём поле *)
  поле:=Поле.Создать(0,0,7,колонок,окружение,ВКЛ,Приём);
  (* создаём наделы *)
  подложка:=
  Подложка.Создать(0,0,0,0,"Замена");
  зОбразец:=
  Записка.Создать (1,позОбразец,1,-2,цОбразец);
  зНа:=
  Записка.Создать (2,позНа,1,-2,'на');
  зЗамена:=
  Записка.Создать (3,позЗамена,1,-2,цЗамена);
  черта:=
  Черта.Создать   (4,0,1,0);
  кнЗаменить:=
  Кнопка.Создать  (5,позЗаменить,цЗаменить,сЗаменить,ВКЛ);
  кнВсе:=
  Кнопка.Создать  (5,позВсе,цВсе,сВсе,ВКЛ);
  кнПропустить:=
  Кнопка.Создать  (5,позПропустить,цПропустить,сПропустить,ВКЛ);
  кнОтмена:=
  Кнопка.Создать  (5,позОтмена,цОтмена,Поле.сОтмена,ВКЛ);
  (* добавляем наделы в порядке отрисовки и получения ввода *)
  Поле.ДобавитьНадел(поле,подложка);
  Поле.ДобавитьНадел(поле,зОбразец);
  Поле.ДобавитьНадел(поле,зНа);
  Поле.ДобавитьНадел(поле,зЗамена);
  Поле.ДобавитьНадел(поле,черта);
  Поле.ДобавитьНадел(поле,кнЗаменить);
  Поле.ДобавитьНадел(поле,кнВсе);
  Поле.ДобавитьНадел(поле,кнПропустить);
  Поле.ДобавитьНадел(поле,кнОтмена);
  (* основная работа *)
  Поле.Рисовать(поле);
  ПОВТОРЯТЬ
    Поле.Проверить(поле)
  ДО поле.состояние # Поле.сРабота;
  (* восстанавливаем окружение *)
  Поле.Рисовать(окружение);
  ВОЗВРАТ поле.состояние
КОН Выполнить;

КОН ПолеЗамена.

 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы